package model.simulationmodel.logicelements;

import model.editormodel.Input;
import model.editormodel.LogicEditorElement;
import model.editormodel.Output;
import model.simulationmodel.SimulationModel;

/**
 * <b>Erbt:</b> <code>LogicSimulationElement</code> <br>
 * <b>Funktion:</b> Umsetzung der Logik eines Multiplikators<br>
 * <b>Logik:</b> a = Eingang, o = Ausgang <br>
 * a || o <br>
 * ----<br>
 * 1 || 1 <br>
 * 0 || 0 <br>
 * Undefined || Undefined <br>
 * <br>
 * Repraesentiert einen Knoten, der die Belegung am Eingang an den Ausgang
 * direkt weiterleitet.
 * 
 * @author Team Locsi
 * 
 */
public class LogicNODE extends LogicSimulationElement {

	/**
	 * Dieser Konstruktor erzeugt ein neues <code>LogicNODE</code>-Objekt.
	 * 
	 * @param sModel
	 *            <code>SimulationModel</code> - Referenz auf das
	 *            <code>SimulationModel</code>
	 * @param logicEditorElement
	 *            <code>LogicEditorElement</code> - Referenz auf das zugehoerige
	 *            <code>LogicEditorElement</code>
	 */
	public LogicNODE(SimulationModel sModel,
			LogicEditorElement logicEditorElement) {
		super(sModel, logicEditorElement);
	}

	@Override
	public void calcLogicValue() {
		// Output wird nur gesetzt wenn sich der Wert am Ausgang aendern wuerde
		if (logicInputValueMap.get(Input.STD_A) != logicOutputValueMap
				.get(Output.STD_O)) {
			this.setOutputValue(Output.STD_O,
					logicInputValueMap.get(Input.STD_A));
		}
	}
}